/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: sunj
 * <p>
 * 文件名:ISysDeptService.java
 * <p>
 * 类产生时间: 2012-5-31 上午16:30:25
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.service;

import java.util.List;
import java.util.Map;

import com.oceansoft.core.common.util.Pagination;
import com.oceansoft.core.domain.SysDept;
import com.oceansoft.core.domain.SysUser;



public interface ISysDeptService {
	
	/**
	 * 查询部门树
	 * @param deptId 父部门编号
	 * @return
	 */
	public List<SysDept> findDeptTree(String deptId,SysUser user,String isparent);
	
	/**
	 * 根据部门编号查询
	 * @param deptId
	 * @return
	 */
	public SysDept findByDeptId(String deptId);
	
	
	
	
	
	
	
	
	

	/**
	 * 获取所有部门信息
	 */
	public List<SysDept> findAllDept(String path);
	public List<SysDept> findAllDept(SysUser user);
	public List<SysDept> findAllAsyncDept();
	
	/**
	 * 管理员获取所有部门信息
	 */
	public List<SysDept> findAllDept(String deptId, String path);
		
	/**
	 * 通过部门Id获取人员信息
	 * @param id 部门编号
	 */
	public List<SysUser>  findUserByDeptId(String deptId);
	
	/**
	 * 通过parentId 查询是否有子节点
	 * @param pId  父节点编号
	 * @return  list
	 */
	public List<SysDept> findDeptByPid(String pId);
	
	/**
	 * 根据部门编号查询部门信息
	 * @param deptId 部门编号
	 * @return list
	 */
	public List<SysDept> findDeptByDeptId(String deptId);
	/**
	 * 根据部门编号查询部门信息
	 * @param deptId 部门编号
	 * @return list
	 */
	public List<SysDept> findDeptById(String deptId);
	
	/**
	 * 根据部们编号 分页显示部门信息
	 * @param deptId    部门编号
	 * @param pageIndex	 当前索引页
	 * @return pagination
	 */
	public Pagination<SysDept> findDeptByPagination(String deptId,int pageIndex);
	
	
	/**
	 * 根据查询条件模糊查询
	 * @param params 查询条件的键值对
	 * @param pageIndex
	 * @return
	 */
	public Pagination<SysDept> fuzzyQuery(Map<String,String> params,int pageIndex);
	
	
	
	
	/**
	 * 根据部门编号删除部门信息
	 * @param deptId  部门编号
	 */
	public void deleteDeptByDeptId(String deptId);
	
	/**
	 * 新增部门
	 * @param dept
	 * @return 2编号重复 1新增成功 0 新增不成功 
	 */
	public int addDept(SysDept dept);
	
	/**
	 * 编辑之后的保存
	 * @param dept
	 * @return 2编号重复 1成功 0 不成功 
	 */
	public int saveEdit(SysDept dept);
	
	/**
	 * 根据部门编号查询所有的父部门编号，不包含root，但是包含自身
	 * @param deptId
	 * @return
	 */
	public List<String> findParents(String deptId);
	
	/**
	 * 根据部门编号查询所有的父部门编号，不包含root，但是包含自身(根据管理员查询)
	 * @param deptId
	 * @param policeNum
	 * @return
	 */
	public List<String> findParents(String deptId, String policeNum);
	
	/**
	 * 删除部门
	 * @param deptId
	 * @return 0 成功 1非叶子部门 2部门不为空 3 else
	 */
	public int deleteDept(String deptId);
	
	/**
	 * 拖动排序
	 * @param deptId 被拖动部门编号
	 * @param targetDeptId 目标部门编号
	 */
	public void saveChangOrder(String deptId,String targetDeptId);
	
	/**
	 * 根据部门编号获取部门信息
	 * @param deptId   部门编号
	 * @return
	 */
	List<SysDept> findDeptInfoByDeptId(String deptId);
	
	/**
	 * 查询
	 * @param deptId
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysDept> findNameByPagination(String deptId, int pageIndex);

	/**
	 * 管理员根据自己的管辖范围查找树
	 * @param deptId	要加载的deptId
	 * @param policeNum	管理员警号
	 */
	public List<Object> findBackTree(String deptId, String policeNum, String path);

	/**
	 * 前台通讯录模块查询部门，把直属部门放到和区分局同一级
	 * @return
	 */
	public List<SysDept> findContactDepts(String iconPath);

	/**
	 * 输入简拼查询所对应的部门
	 * @param jpin
	 * @return
	 */
	public List<SysDept> findByJpin(String jpin);
        
        /**
         * 根据部门简称查询部门编号
         * @param alias
         * @return 
         */
        public String findDeptByAlias(String alias);
      /**
       * 模糊匹配二级部门
       * @param dw1
       * @param dw2
       * @return
       */
		public List<SysDept> findByDw1AndDw2(String dw1, String dw2);
    /**
     * 验证一级部门
     * @param dw1
     * @return
     */
	public SysDept selDept(String dw1);
    /**
     * 查询子部门
     * @param deptId
     * @return
     */
	public List<SysDept> findSubDeptTree(String dw1,String deptId);

	public List<SysDept> _findByJpin(String jpin);


	int finddeptcount(String deptId);

	SysDept findByParentAndName(String deptId, String name);
}
